home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / fractal / kaos.lha / auxlib / aux_handle_event.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-18  |  6.1 KB  |  151 lines

  1. /*
  2. ### handle event from the combined space windows ###
  3. */
  4.  
  5. #include <suntool/sunview.h>
  6. #include <suntool/canvas.h>
  7.  
  8. void aux_handle_event(canvas,event,arg)
  9. Canvas          canvas;
  10. Event          *event;
  11. caddr_t         arg;
  12. {
  13.     static int r_x, r_y, r_xnew, r_ynew, r_tmp;
  14.     int i,e_id, e_down,e_ctrl_down,e_shift_down,e_x, e_y;
  15.     double aux_xsize, aux_ysize,x_scaled, y_scaled;
  16.     extern Canvas *aux_canvas;
  17.     extern Menu aux_menu;
  18.     extern int aux_win_i;
  19.     extern int func_on,region_index,n_stored_data2,my_colormap_size,var_dim,param_dim,full_dim;
  20.     extern int aux_max;
  21.     extern int **aux_cur_index;
  22.     extern int *aux_rescale,*aux_win_mode;
  23.     extern int aux_xcanvas,aux_ycanvas,aux_l_margin,aux_b_margin,aux_xwidth,aux_ywidth;
  24.     extern double **aux_x_max,**aux_x_min,*win_var_i,*param,*t_va;
  25.     extern char string[];
  26.     extern int *data0_color,*data1_color,*data2_color;
  27.     extern double **data0_x,**data1_x,**data2_x;
  28.     e_id = event_id(event);
  29.     e_x = event_x(event);
  30.     e_y = event_y(event);
  31.     e_down = event_is_down(event);
  32.     e_ctrl_down = event_ctrl_is_down(event);
  33.     e_shift_down = event_shift_is_down(event);
  34.  
  35.     if(e_down){
  36.         for(i=0;i<=aux_max;i++){
  37.             if(canvas == aux_canvas[i]){
  38.                 aux_win_i = i;
  39.                 break;
  40.             }
  41.         }
  42.         /* if aux_win_mode is on, choose the aux box data
  43.         whenever the event is down on the auxilieary window
  44.         otherwise keep a current data selection from the main window */
  45.         if(aux_win_mode[aux_win_i]){
  46.             region_index = 2;
  47.             if(e_id == MS_LEFT || e_id == MS_MIDDLE || e_id == MS_RIGHT){
  48.                 sprintf(string,"aux space and aux window [%d] selected!",aux_win_i);
  49.                 system_mess_proc(0,string);
  50.             }
  51.         }
  52.     }
  53.     else {
  54.         return;
  55.     }
  56.  
  57.     if(!aux_rescale[aux_win_i] && e_ctrl_down && !e_shift_down && e_id == MS_MIDDLE && e_down){ 
  58.         (void) aux_clear_region(aux_win_i);
  59.     }
  60.     if(!aux_rescale[aux_win_i] && !e_ctrl_down && e_id == MS_LEFT && e_down) {
  61.         if (e_x >= aux_l_margin && e_x <= aux_l_margin + aux_xwidth) {
  62.             if (e_y <= aux_ycanvas - aux_b_margin && e_y >= aux_ycanvas - aux_b_margin - aux_ywidth) {
  63.                 /* THere is a bug here. System crashes */
  64.                 x_scaled = (e_x - aux_l_margin) / (double) aux_xwidth;
  65.                 y_scaled = ((aux_ycanvas - e_y) - aux_b_margin) / (double) aux_ywidth;
  66.                 t_va[aux_cur_index[aux_win_i][0]] = aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i] 
  67.                     + x_scaled * (aux_x_max[aux_cur_index[aux_win_i][0]][aux_win_i] - aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i]);
  68.                 t_va[aux_cur_index[aux_win_i][1]] = aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i] 
  69.                     + y_scaled * (aux_x_max[aux_cur_index[aux_win_i][1]][aux_win_i] - aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i]);
  70.                 if(aux_cur_index[aux_win_i][0] < full_dim ){
  71.                     win_var_i[aux_cur_index[aux_win_i][0]]=t_va[aux_cur_index[aux_win_i][0]];
  72.                 }
  73.                 else{ 
  74.                     param[aux_cur_index[aux_win_i][0]-full_dim]=t_va[aux_cur_index[aux_win_i][0]];
  75.                 }
  76.                 if(aux_cur_index[aux_win_i][1] < full_dim ){
  77.                     win_var_i[aux_cur_index[aux_win_i][1]]=t_va[aux_cur_index[aux_win_i][1]];
  78.                 }
  79.                 else{ 
  80.                     param[aux_cur_index[aux_win_i][1]-full_dim]=t_va[aux_cur_index[aux_win_i][1]];
  81.                 }
  82.             }
  83.             all_refresh();
  84.         }
  85.     }
  86.  
  87.     if (!aux_rescale[aux_win_i] && !e_ctrl_down && e_shift_down && e_id == MS_MIDDLE && e_down) {
  88.         aux_redisplay_data(aux_win_i);
  89.         all_refresh();
  90.     }
  91.     /* enter a rescaling mode */
  92.     if ((aux_rescale[aux_win_i] || e_ctrl_down) && e_id == MS_LEFT && e_down) {
  93.         if(e_ctrl_down)
  94.             aux_rescale[aux_win_i] = 1- aux_rescale[aux_win_i];
  95.         aux_rubber_box(aux_win_i,r_x, r_y, r_xnew - r_x, r_y - r_ynew, my_colormap_size-1);
  96.         r_x = e_x;
  97.         r_y = e_y;
  98.         r_xnew = r_x;
  99.         r_ynew = r_y;
  100.         aux_rubber_box(aux_win_i,r_x, r_y, r_xnew - r_x, r_y - r_ynew, my_colormap_size-1);
  101.     }
  102.     /* show the rubberband box for the rescaled region */
  103.     if (aux_rescale[aux_win_i] && e_id == LOC_DRAG) {
  104.         aux_rubber_box(aux_win_i,r_x, r_y, r_xnew - r_x, r_y - r_ynew, my_colormap_size-1);
  105.         r_xnew = e_x;
  106.         r_ynew = e_y;
  107.         aux_rubber_box(aux_win_i,r_x, r_y, r_xnew - r_x, r_y - r_ynew, my_colormap_size - 1);
  108.     }
  109.     /* rescaling action and exit rescaling mode */
  110.     if (aux_rescale[aux_win_i] && e_id == MS_MIDDLE && e_down) {
  111.         if (r_x > r_xnew) {
  112.             r_tmp = r_xnew;
  113.             r_xnew = r_x;
  114.             r_x = r_tmp;
  115.         }
  116.         if (r_y < r_ynew) {
  117.             r_tmp = r_ynew;
  118.             r_ynew = r_y;
  119.             r_y = r_tmp;
  120.                 if(!e_shift_down) {
  121.                     aux_xsize = aux_x_max[aux_cur_index[aux_win_i][0]][aux_win_i] - aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i];
  122.                     aux_ysize = aux_x_max[aux_cur_index[aux_win_i][1]][aux_win_i] - aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i];
  123.                     aux_x_max[aux_cur_index[aux_win_i][0]][aux_win_i] = aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i] 
  124.                     + aux_xsize * (r_xnew - aux_l_margin) / (double) aux_xwidth;
  125.                     aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i] += aux_xsize * (r_x - aux_l_margin) / (double) aux_xwidth;
  126.                     aux_x_max[aux_cur_index[aux_win_i][1]][aux_win_i] = aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i] 
  127.                     + aux_ysize * ((aux_ycanvas - r_ynew) - aux_b_margin) / (double) aux_ywidth;
  128.                     aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i] += aux_ysize * ((aux_ycanvas - r_y) - aux_b_margin) / (double) aux_ywidth;
  129.                 }
  130.                 else {
  131.                     aux_xsize = aux_x_max[aux_cur_index[aux_win_i][0]][aux_win_i]  - aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i];
  132.                     aux_ysize = aux_x_max[aux_cur_index[aux_win_i][1]][aux_win_i] - aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i];
  133.                     aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i] -= aux_xsize * (r_x - aux_l_margin) / (r_xnew - r_x);
  134.                     aux_x_max[aux_cur_index[aux_win_i][0]][aux_win_i] = aux_x_min[aux_cur_index[aux_win_i][0]][aux_win_i] 
  135.                     + aux_xsize * aux_xwidth / (r_xnew - r_x);
  136.                     aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i] -= aux_ysize * ((aux_ycanvas - r_y) - aux_b_margin) / (r_y - r_ynew);
  137.                     aux_x_max[aux_cur_index[aux_win_i][1]][aux_win_i] = aux_x_min[aux_cur_index[aux_win_i][1]][aux_win_i] 
  138.                     + aux_ysize * aux_ywidth / (r_y - r_ynew);
  139.                 }
  140.         }
  141.         all_refresh();
  142.         aux_redisplay_data(aux_win_i);
  143.         aux_rescale[aux_win_i] = 0;
  144.         r_xnew = r_x;
  145.         r_ynew = r_y;
  146.     }
  147.     if (!aux_rescale[aux_win_i] && !e_ctrl_down && !e_shift_down && e_id == MS_RIGHT && e_down) {
  148.         menu_show(aux_menu,aux_canvas[aux_win_i],event,0);
  149.     }
  150. }
  151.